package com.gcxy.utils;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.engine.VelocityTemplateEngine;

import java.util.ArrayList;
import java.util.List;

/**
 * @auther:韦林鹏 `*@since:2023/12/4 09 13
 * @description:
 */
public class CodeGenerator {
    public static void main(String[] args){
        String url="jdbc:mysql:///nmh?serverTimezone=UTC";
        String username="root";
        String password="wlp030505";
        String module="";//表示项目的模块名称
        String outPath=System.getProperty("user.dir")+"/"+module+"/src/main/java";
        String parent="com.gcxy";//父包的名称
        String moduleName="";//模块名
        String entity="entity";
        String mapper="mapper";
        String service="service";
        String serviceImpl="service.Impl";
        String controller="controller";
        String mapperXml="mapper.xml";
        List<String> table=new ArrayList<>();
        table.add("city");

        FastAutoGenerator.create(url,username,password)
                //全局设置
                .globalConfig(builder -> {
                    builder.author("wlp") // 设置作者
                            .enableSwagger() // 开启 swagger 模式
                            .fileOverride() // 覆盖已生成文件
                            .outputDir(outPath)// 指定输出目录
                            .disableOpenDir();//生成后不打开目录
                })
                //包配置
                .packageConfig(builder -> {
                    builder.parent(parent) // 设置父包名
                            .moduleName(moduleName) // 设置父包模块名
                            .entity(entity)//设置实体类名称
                            .mapper(mapper)
                            .service(service)
                            .serviceImpl(serviceImpl)
                            .controller(controller)
                            .xml(mapperXml);
                })
                //模板配置
                //策略配置
                .strategyConfig(builder -> {
                    builder.addInclude(table) // 设置需要生成的表名
//                            .addTablePrefix("t_", "c_"); // 设置过滤表前缀
                            .entityBuilder()//开启自动生成 实体类
                            .enableLombok()//开启lombok
                            .mapperBuilder()//开启生成mapper
                            .superClass(BaseMapper.class)
//                            .enableMapperAnnotation()//开启mapper注解
                            .formatMapperFileName("%sMapper")//格式化mapper名称
                            .formatXmlFileName("%sMapper")//格式化xml的名称
                            .serviceBuilder()//开启生成service
                            .formatServiceFileName("%sService")//格式化service名称
                            .formatServiceImplFileName("%sServiceImpl")//格式化serviceImpl名称
                            .controllerBuilder()//开启生成controller
                            .formatFileName("%sController")//格式化controller名称
                            .enableRestStyle();
                })
                .templateEngine(new VelocityTemplateEngine()) // 使用Freemarker引擎模板，默认的是Velocity引擎模板
                .execute();
    }
}
